﻿using System;
using Asistente.Model.Representation;

namespace Asistente.Model.IFPUG.MeasureUtilities
{
    //Clase encargada de conocer el aporte en DETs para cada uno de los controles, tanto en caso
    // de aportar DETs a la funcion de datos, como en caso de aportar DETs a la funcion de transaccion.

    public class ControlManager
    {
        private static ControlManager _instance;

        public static ControlManager Instance
        {            
            get {
                if (_instance == null)
                {
                    _instance = new ControlManager();                    
                }
                return _instance;
            }
        }

        //Metodo que retorna la cantidad de DET que aporta un determinado control para la funcion de datos
        //Solamente se llama a esta funcion para los paneles Form o Grid que son los que aportan
        //DET a la entidad que editan
        public int GetDetDataFunction(ControlPattern controlPattern)
        {
            switch (controlPattern)
            {
                case ControlPattern.PlainTextInput:
                    return 1; 
                case ControlPattern.PlainTextOutput:
                    return 1; 
                case ControlPattern.DropDownList:
                    return 1; 
                case ControlPattern.DropDownChooser:
                    return 1; 
                case ControlPattern.SmallSetSingleSelector:
                    return 1; 
                case ControlPattern.SmallSetMultipleSelector:
                    return 0; // No es un campo de la entidad 
                case ControlPattern.DatePicker:
                    return 1; 
                case ControlPattern.DateRangeInput:
                    return 1; 
                case ControlPattern.CheckBox:
                    return 1; 
                case ControlPattern.RadioButton:
                    return 1; 
                case ControlPattern.SlideControl:
                    return 1; 
                case ControlPattern.CalculatedField:
                    return 0; // No es un campo de la entidad 
                case ControlPattern.PatternEdit:
                    return 1;
                case ControlPattern.StructuredEdit:
                    return 1;
                case ControlPattern.Autocomplete:
                    return 1;
                default:
                    throw new NotImplementedException(); // No hay mas casos
            }
        }             

        //Metodo que retorna la cantidad de DET que aporta un determinado control para la funcion de transaccion
        public int GetDetTransactionalFunction(ControlPattern pattern)
        {
            switch (pattern)
            {
                case ControlPattern.PlainTextInput:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.PlainTextOutput:
                    return 1; // Aporta un DET solamente si esta almacenado en el sistema
                case ControlPattern.DropDownList:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.DropDownChooser:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.SmallSetSingleSelector:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.SmallSetMultipleSelector:
                    return 2; //Aporta 2 DET, por la accion de seleccionar y por el campo
                case ControlPattern.DatePicker:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.DateRangeInput:
                    return 2; // Aporta dos DET, dos campos unicos reconocibles por el usuario
                case ControlPattern.CheckBox:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.RadioButton:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.SlideControl:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.CalculatedField:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.PatternEdit:
                    return 1; // Aporta un solo DET, campo unico reconocible por el usuario
                case ControlPattern.StructuredEdit:
                    return 1; //Aporta 1 DET, las partes son visuales, corresponde solamente a un campo
                case ControlPattern.Autocomplete:
                    return 1;// Aporta un solo DET, campo unico reconocible por el usuario
                default:
                    throw new NotImplementedException(); // No hay mas casos
            }
        }

    } 
}
